package beans;

import java.io.Serializable;
import java.util.Date;
import java.util.LinkedList;
import java.util.List;

/**
 * Classe para objetos do tipo usuário onde serão contidos valores e métodos para o mesmo
 * @author Everton Oliveira && Robson Medeiros
 */
public class Usuario implements Serializable{

    private String nome;
    private String login;
    private String senha;
    private String descricao;
    private String estadoCivil;
    private Date aniversario;
    private String cidadeNatal;
    private List<Usuario> amigos = new LinkedList<Usuario>();
    private List<Usuario> pendentes = new LinkedList<Usuario>();
    private List<Evento> eventos = new LinkedList<Evento>();
    private List<Evento> eventosParticipa = new LinkedList<Evento>();

    //Construtor da classe
    public Usuario(String login, String senha, String nome) {
        this.login = login;
        this.senha = senha;
        this.nome = nome;
    }

    /**
     *
     * @return String - nome do usuário
     */
    public String getNome() {
        return nome;
    }

    /**
     *
     * @return String - login do usuário
     */
    public String getLogin() {
        return login;
    }

    /**
     *
     * @return String - senha do usuário
     */
    public String getSenha() {
        return senha;
    }

    /**
     * atualiza descrição do usuário
     * @param descricao
     */
    public void setDescricao(String descricao) {
        this.descricao = descricao;
    }

    /**
     *
     * @return String - descriçao do usuário
     */
    public String getDescricao() {
        return descricao;
    }

    /**
     *
     * @return String - estado civil do usuário
     */
    public String getEstadoCivil() {
        return estadoCivil;
    }

    /**
     * atualiza estado civíl do usuário
     * @param estadoCivil
     */
    public void setEstadoCivil(String estadoCivil) {
        this.estadoCivil = estadoCivil;
    }

    /**
     *
     * @return Date
     */
    public Date getAniversario() {
        return aniversario;
    }

    /**
     * atualiza aniversário do usuário
     * @param aniversario
     */
    public void setAniversario(Date aniversario) {
        this.aniversario = aniversario;
    }

    /**
     *
     * @return String
     */
    public String getCidadeNatal() {
        return cidadeNatal;
    }

    /**
     * atualiza cidade natal do usuário
     * @param cidadeNatal
     */
    public void setCidadeNatal(String cidadeNatal) {
        this.cidadeNatal = cidadeNatal;
    }

    /**
     *
     * @return List<Usuario> - retorna lista de amigos do usuário
     */
    public List<Usuario> getListaAmigos() {
        return amigos;
    }

    /**
     *
     * @return List<Usuario> - retorna lista pendentes
     */
    public List<Usuario> getPendentes() {
        return pendentes;
    }

    /**
     *
     * @return String
     */
    public String getAmigos() {
        String amigosAdicionados = "{";
        if (!amigos.isEmpty()) {
            for (Usuario usuario : amigos) {
                amigosAdicionados += usuario.getLogin() + ",";
            }
            amigosAdicionados = amigosAdicionados.substring(0, amigosAdicionados.length() - 1);
        }

        amigosAdicionados += "}";
        return amigosAdicionados;
    }

    /**
     *
     * @param obj
     * @return boolean
     */
    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (this.getClass() != obj.getClass()) {
            return false;
        }
        final Usuario other = (Usuario) obj;
        if ((this.login == null) ? (other.login != null) : !this.login.equals(other.login)) {
            return false;
        }
        return true;
    }

    /**
     *
     * @return String
     */
    public String getEventos() {
        String eventoUsusuarioEhDono = "{";
        if (!eventos.isEmpty()) {
            if (this.getListaEventos().size() == 1) {
                int idEvento = this.eventos.get(0).getIdEvento();
                return Integer.toString(idEvento);
            } else {
                for (Evento evento : eventos) {
                    eventoUsusuarioEhDono += evento.getIdEvento() + ",";
                }
                eventoUsusuarioEhDono = eventoUsusuarioEhDono.substring(0, eventoUsusuarioEhDono.length() - 1);
            }
        }
        eventoUsusuarioEhDono += "}";
        return eventoUsusuarioEhDono;
    }

    /**
     *
     * @return String
     */
    public String getEventosParticipa() {
        String eventosPaticipa = "{";
        if (!eventosParticipa.isEmpty()) {
            if (this.getListaEventosParticipa().size() == 1) {
                int idEvento = this.eventosParticipa.get(0).getIdEvento();
                return Integer.toString(idEvento);
            } else {
                for (Evento evento : eventosParticipa) {
                    eventosPaticipa += evento.getIdEvento() + ",";
                }
                eventosPaticipa = eventosPaticipa.substring(0, eventosPaticipa.length() - 1);
            }
        }
        eventosPaticipa += "}";
        return eventosPaticipa;
    }

    /**
     *
     * @return List<Evento> - lista de eventos do usuário
     */
    public List<Evento> getListaEventos() {
        return eventos;
    }

    /**
     * @return List<Evento> - lista de eventos que usuário participa
     */
    public List<Evento> getListaEventosParticipa() {
        return eventosParticipa;
    }
}
